/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package algoritmomemetico;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

/**
 *
 * @author Victor
 */
public class AlgMemeticoBeanFunction {

    private HashMap<String, TrabajadorBeanData> trabajadores;
    private ArrayList<String> codMaquinas;
    private HashMap<String,MaquinaBeanData> maquinasDisponibles;
    private HashMap<String, TrabajadorBeanData> trabajadoresMaquinas;
    private ArrayList<String> CodTrabajadores;
    private int trabajadoresSize;

    private String SeleccionarTrabajador() {
        Random rnd= new Random();
        int rndInt= rnd.nextInt(trabajadoresSize);
        String seleccion=getCodTrabajadores().get(rndInt); 
        getCodTrabajadores().remove(rndInt);
        trabajadoresSize--;
        return seleccion ;
    }
    
    public HashMap<String,String>GenerarSolucion(HashMap<String,String> anterior){
        int maquinaSize=getCodMaquinas().size();        
        HashMap<String,String> solucion= new HashMap<>();
        while((anterior==null && !solucion.isEmpty())|| (anterior!=null && anterior.equals(solucion))||solucion.isEmpty()){
            solucion.clear();
            for(int i=0;i<maquinaSize;i++){            
                solucion.put(getCodMaquinas().get(i),this.SeleccionarTrabajador());            
            }                         
        }
        return solucion;
    }
    
    //public HashMap<String,String> ALG01() throws Exception{        
    public String ALG01() throws Exception{ 
        //HashMap<String,String> rst= new HashMap<>();
        StringBuffer rst= new StringBuffer();
        ArrayList<HashMap<String,String>> Soluciones= new ArrayList<>();
        int i=10;
        for(int j=0;j<i;j++){            
            int size=Soluciones.size();
            Soluciones.add(this.GenerarSolucion(j==0?null:Soluciones.get(j-1)));            
            if(Soluciones.size()<=size) throw new Exception("Error al generar soluciones");                        
        }        
        i=Soluciones.size();
        for(int j=0;j<i;j++){            
            rst.append("CodMaquina-CodTrabajador-Produccion-Perdida-ProduccionTotal\n");
            //rst.append(""+Soluciones.lk);
        }
        return rst.toString();
    } 
    
    //SETTERS AND GETTERS

    /**
     * @return the trabajadores
     */
    public HashMap<String, TrabajadorBeanData> getTrabajadores() {
        return trabajadores;
    }

    /**
     * @param trabajadores the trabajadores to set
     */
    public void setTrabajadores(HashMap<String, TrabajadorBeanData> trabajadores) {
        this.trabajadores = trabajadores;
    }

    /**
     * @return the codMaquinas
     */
    public ArrayList<String> getCodMaquinas() {
        return codMaquinas;
    }

    /**
     * @param codMaquinas the codMaquinas to set
     */
    public void setCodMaquinas(ArrayList<String> codMaquinas) {
        this.codMaquinas = codMaquinas;
    }

    /**
     * @return the maquinasDisponibles
     */
    public HashMap<String,MaquinaBeanData> getMaquinasDisponibles() {
        return maquinasDisponibles;
    }

    /**
     * @param maquinasDisponibles the maquinasDisponibles to set
     */
    public void setMaquinasDisponibles(HashMap<String,MaquinaBeanData> maquinasDisponibles) {
        this.maquinasDisponibles = maquinasDisponibles;
    }

    /**
     * @return the trabajadoresMaquinas
     */
    public HashMap<String, TrabajadorBeanData> getTrabajadoresMaquinas() {
        return trabajadoresMaquinas;
    }

    /**
     * @param trabajadoresMaquinas the trabajadoresMaquinas to set
     */
    public void setTrabajadoresMaquinas(HashMap<String, TrabajadorBeanData> trabajadoresMaquinas) {
        this.trabajadoresMaquinas = trabajadoresMaquinas;
    }

    /**
     * @return the CodTrabajadores
     */
    public ArrayList<String> getCodTrabajadores() {
        return CodTrabajadores;
    }

    /**
     * @param CodTrabajadores the CodTrabajadores to set
     */
    public void setCodTrabajadores(ArrayList<String> CodTrabajadores) {
        this.CodTrabajadores = CodTrabajadores;
    }
            
    
}
